// Copyright(c) 2015-present, Gabi Melman & spdlog contributors.
// Distributed under the MIT License (http://opensource.org/licenses/MIT)

#pragma once

#include "abel/log/details/log_msg.h"
#include "abel/log/formatter.h"

namespace abel {

namespace sinks {
class ABEL_API sink {
  public:
    virtual ~sink() = default;

    virtual void log(const details::log_msg &msg) = 0;

    virtual void flush() = 0;

    virtual void set_pattern(const std::string &pattern) = 0;

    virtual void set_formatter(std::unique_ptr<abel::log_formatter> sink_formatter) = 0;

    void set_level(level::level_enum log_level);

    level::level_enum level() const;

    bool should_log(level::level_enum msg_level) const;

  protected:
    // sink log level - default is all
    level_t level_{level::trace};
};

} // namespace sinks
}  // namespace abel

#include "abel/log/sinks/sink_inl.h"

